package scorekeep;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
public class UserFactory {
private final UserModel model = new UserModel();
public UserFactory(){
}
public User newUser() throws IOException {
String id = Identifiers.random();
User user = new User(id);
String name = randomName();
user.setName(name);
model.saveUser(user);
return user;
}
public User newUser(String name) throws IOException {
String id = Identifiers.random();
User user = new User(id);
user.setName(name);
model.saveUser(user);
return user;
}
public String randomName() throws IOException {
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet("http://uinames.com/api/");
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
ObjectMapper mapper = new ObjectMapper();
Map<String, String> jsonMap = mapper.readValue(inputStream, Map.class);
String name = jsonMap.get("name");
EntityUtils.consume(entity);
return name;
} finally {
response.close();
}
}
public User getUser(String userId) throws UserNotFoundException {
return model.loadUser(userId);
}
public List<User> getUsers() {
return model.loadUsers();
}
}